/*
 * @Description: 被手动创建的菜单
 * @Author: diyhome
 * @Date: 2020-08-12 16:33
 * @File: menu_string
*/

#ifndef YAOKONGQI_MENU_STRING_H
#define YAOKONGQI_MENU_STRING_H

#define OLED_SHOW_LINE_START 2      // 目标显示器起始行数
#define OLED_SHOW_LINE_STOP  7      // 结束行
#define OLED_SHOW_LINE_MAX (OLED_SHOW_LINE_STOP - OLED_SHOW_LINE_START + 1)       // 目标显示器单次显示的最大函数
#define HIGH_SIGN_OFFSET 8          // 高亮显示符号偏移量
#define HIGHLIGHT_SIGN "*"

#include "stdint.h"

/**
 * 显示驱动函数
 * 使用了void OLED_ShowStr & OLED_Fill()
 * 移植需要可以直接依据目标显示器写个参数符号上述函数参数的函数
 * 移植的同时需要修改OLED_SHOW_LINE_MAX为目标显示器单次显示能够显示的最大行数
 */
#include "OLED/oled_iic.h"

// 定义一个结构体存储菜单结构
typedef struct menu_struct{
    uint8_t item_Index;                 // 菜单索引
    char *disp_String;                  // 菜单文字, 注意显示器驱动那里的是uchar
    void (*item_Func)(void);            // 选中当前菜单执行的动作

    struct menu_struct *pParentMenu;    // 父菜单
    struct menu_struct *pChildMenu;     // 子菜单
}menu;

// 记录当前菜单
extern menu *p_Current_Item;

// 按键相关操作
void menu_init();
void key_enter();
void key_return();
void key_up();
void key_down();

#endif //YAOKONGQI_MENU_STRING_H
